#include "My_CortexM3_Def.h"
#include <stdio.h>
#include <math.h>

int main(void)
{
  char s[70];
  Uint i=0;
  
  RCC->APB2ENR |= RCC_APB2PERIPH_GPIOA;
  RCC->APB2ENR |= RCC_APB2PERIPH_GPIOB;
  RCC->APB2ENR |= RCC_APB2PERIPH_USART1;
  RCC->APB2ENR |= RCC_APB2PERIPH_GPIOC; 
  
/*
  // USART Transmit init
  Port_Init( GPIOA ,
             GPIO_USART_Tx_PIN,
             GPIO_Speed_50MHz,
             GPIO_MODE_AF_PP);

  // USART Receive init
  Port_Init( GPIOA ,
             GPIO_USART_Rx_PIN,
             GPIO_Speed_50MHz,
             GPIO_MODE_IN_FLOATING);
  */
//     GPIO_InitTypeDef GPIO_InitStructure;

    // UART configuration ...

    /* Configure USARTx_Tx as alternate function push-pull */
    /*GPIO_InitStructure.GPIO_PIN = GPIO_USART_Tx_PIN;
    GPIO_InitStructure.GPIO_SPEED = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_MODE = GPIO_MODE_AF_PP;*/
    
    Port_Init( GPIOUSART,
               GPIO_USART_Tx_PIN,
               GPIO_Speed_50MHz,
               GPIO_MODE_AF_PP); 
   
    /* Configure USARTx_Rx as input floating */
/*    GPIO_InitStructure.GPIO_PIN = GPIO_USART_Rx_PIN;
    GPIO_InitStructure.GPIO_MODE = GPIO_MODE_IN_FLOATING; */

    Port_Init( GPIOUSART,
               GPIO_USART_Rx_PIN,
               GPIO_Speed_50MHz,
               GPIO_MODE_IN_FLOATING);

    USART_Init();
    Serial_PutString("\r\nHello My name is LSH Cortex-M3~!!!\r\n");

    Port_Init( GPIOB ,
             GPIO_LED1_PIN | GPIO_LED2_PIN | GPIO_LED3_PIN,
             GPIO_Speed_50MHz,
             GPIO_MODE_OUT_PP);
    
    GPIOB_BSRR = GPIO_LED1_PIN | GPIO_LED2_PIN | GPIO_LED3_PIN;
    
    while(1) {
      if(i>90) i = 0;
      sprintf(s,"[%2d] : %f:%f:%f\r\n",i,sin(i*3.141592/180),
                               cos(i*3.141592/180),
                               tan(i*3.141592/180)); 
        Serial_PutString((Uchar *)s);
        delaycnt();
        if(i%2) GPIOB_BSRR = GPIO_LED1_PIN | GPIO_LED2_PIN | GPIO_LED3_PIN;
        else    GPIOB_BRR = GPIO_LED1_PIN | GPIO_LED2_PIN | GPIO_LED3_PIN;
    i++;
    }

}
